
#include <bits/stdc++.h>
using namespace std;
int m, n;
int dp[10005][2];
int main() {
  int n, m;
  cin >> n >> m;
  string s;
  cin >> s;
  s = '0' + s;
  for (int i = 1; i <= n; i++) {
    for (int i = 1; i <= n; i++) { // 零一背包外循环
      char ch = s[i];

      int fx, ffx, cost; // 体力
      if (ch == '1' || ch == '2') {
        fx = 1;
        ffx = 0;
      } else {
        fx = 0;  // 方向0为左，1为右
        ffx = 1; // 反方向
      }
      if (ch == '1' || ch == '3')
        cost = 3;
      else
        cost = 2;

      for (int j = m; j >= 1; j--) { // 零一背包内循环
        // 右路非转向
        if (fx == 1 && j >= cost && dp[j][fx] < dp[j - cost][fx] + 1) {
          dp[j][fx] = dp[j - cost][fx] + 1;
        }
        // 左路非转向，因为初始面向右路，所以至少体力加6才能转到左路
        if (fx == 0 && j >= cost + 6 && dp[j][fx] < dp[j - cost][fx] + 1) {
          dp[j][fx] = dp[j - cost][fx] + 1;
        }
        // 转向
        if (j >= cost + 6 && dp[j][fx] < dp[j - cost - 6][ffx] + 1) {
          dp[j][fx] = dp[j - cost - 6][ffx] + 1;
        }
      }
    }
    cout << max(dp[m][0], dp[m][1]) << endl;
    return 0;
  }